package cn.chengpengper.unit15.serialize;

/*@formatter:off*/

import cn.chengpengper.unit15.serialize.json.JsonSerializer;

/**
 * ____________________
 *  _                _                                                           < 神兽护体，永无bug! >
 * | |__  _   _  ___| |__   ___ _ __   __ _ _ __   ___ _ __   __ _                --------------------
 * | '_ \| | | |/ __| '_ \ / _ \ '_ \ / _` | '_ \ / _ \ '_ \ / _` |                       \   ^__^
 * | | | | |_| | (__| | | |  __/ | | | (_| | |_) |  __/ | | | (_| |                        \  (oo)\_______
 * |_| |_|\__,_|\___|_| |_|\___|_| |_|\__, | .__/ \___|_| |_|\__, |                           (__)\       )\/\
 *                                    |___/|_|               |___/                                ||----w |
 *                                                                                                ||     ||
 *
 * @author huchengpeng
 * @date 2024/3/24 19:43
 * @version v1.0.0
 * @description 序列化接口
 */

/*@formatter:on*/

public interface Serializer {

    byte JSON_SERIALIZER = SerializerAlgorithm.JSON;

    Serializer DEFAULT = new JsonSerializer();

    /**
     * 获取序列化算法
     *
     * @return 序列化算法
     */
    byte getSerializerAlgorithm();

    /**
     * Java 对象转换成二进制数据
     *
     * @param object Java 对象
     * @return 二进制数据
     */
    byte[] serialize(Object object);

    /**
     * 二进制对象转换为 Java 对象
     *
     * @param clazz 类
     * @param bytes 二进制数据
     * @param <T>   泛型
     * @return Java 对象
     */
    <T> T deserialize(Class<T> clazz, byte[] bytes);
}
